home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 133_01 / e1 < prev    next >
Text File  |  1985-03-09  |  7KB  |  295 lines

  1. /*
  2.     e screen editor
  3.  
  4.     (C) G. Nigel Gilbert, MICROLOGY, 1981
  5.  
  6.     August-December 1981
  7.  
  8.     FILE: e1
  9.  
  10.     FUNCTIONS:  printdirectory, envir, files, putonoff, putxy, getnumb
  11.  
  12.     PURPOSE:  environment; change files.
  13.  
  14. */
  15.  
  16. #include "e.h"
  17.  
  18. #define EXTENT 12
  19. #define D0 16
  20. #define DN 31
  21.  
  22. printdirectory(drive)
  23. int drive;
  24. {
  25.     int y, *dsm, *drm, cols, i;
  26.     unsigned blsr, used;
  27.     char c, pos, entriesonline, fcb[36], *bsh;
  28.     sint userno, dmabuf[128], *entry;
  29.  
  30.     putclr();
  31.     if (errmess != NULL) {
  32.         gotoxy(EMPOS,0);
  33.         puts(errmess);
  34.         }
  35.  
  36.     bdos(SETDMA,dmabuf);
  37.     gotoxy(0,6);
  38.     puts("Directory of ");
  39.     putch(drive+'A');
  40.     putch(':');
  41.     if (userno=bdos(USERCODE,0xff)) {
  42.         puts(" (user ");
  43.         uspr(userno);
  44.         puts(") ");
  45.         }
  46.     if (curdsk != drive && seldisk(drive) != FAIL) {
  47.         puts("  |(default drive is ");
  48.         putch(curdsk+'A');
  49.         puts(":|)");
  50.         }
  51.     setfcb(fcb,"*.*");
  52.     fcb[0]='?';
  53.     used=0;
  54.     bsh=bdos(DSKPARAMS)+2;
  55.     dsm=bsh+3;
  56.     drm=dsm+1;
  57.     blsr= (1 << *bsh)/8; /*block size in kbytes*/
  58.     entriesonline=0;
  59.     makedim();
  60.     deleteline(2,(y=8));
  61.     pos=bdos(SEARCH1,fcb);
  62.     while (pos != 0xff) {
  63.         if (inbufp) {
  64.             puts(" ...");
  65.             goto incomplete;
  66.             }
  67.         entry= &dmabuf[pos << 5];
  68.         if (*entry < 16)
  69.             for (i=D0; i <= DN; i++)
  70.                 if (*(entry+i)) used+=blsr;
  71.         if (*entry == userno && *(entry+EXTENT) <= 1) {
  72.             for (i=1, cols=0; i < 12; i++) {
  73.                 c= *(entry+i) & 0x7f;
  74.                 if (i == 9 && c != ' ') {
  75.                     cols++;
  76.                     putch('.');
  77.                     }
  78.                 if (c != ' ') {
  79.                     cols++;
  80.                     putch( (i >= 9 ? tolower(c) : c));
  81.                     }
  82.                 }
  83.             while (cols++ < 12) putch(' ');
  84.             if (++entriesonline == 5) {
  85.                 deleteline(2,++y);
  86.                 if (y == SHEIGHT) {
  87.                     puts("|etc");
  88.                     goto incomplete;
  89.                     }
  90.                 entriesonline=0;
  91.                 }
  92.             else puts(" :  ");
  93.             }
  94.         pos=bdos(SEARCHN,fcb);
  95.         }
  96.     gotoxy(50,SHEIGHT);
  97.     puts("Free space = ");
  98.     uspr(((*dsm+1)*blsr-(*drm+1)/32)-used);
  99.     putch('k');
  100. incomplete:
  101.     if (curdsk != drive) seldisk(curdsk);
  102.     makebright();
  103.     gotoxy(0,0);
  104. }
  105.  
  106. #define XTEXT 10
  107. #define XVAL  42
  108. #define XPROMPT 63
  109. #define YTITLE 4
  110. #define YFILE 6
  111. #define YAUTO 8
  112. #define YBACKUP 9
  113. #define YTAB 10
  114. #define YSTRIP 11
  115. #define YCURSOR 12
  116. #define YSCROLL 13
  117. #define YHILITE 14
  118. #define YPROMPT 16
  119. #define YSPACE 22
  120. envir()
  121. {
  122.         char c, getlow();
  123.     struct addr anaddr;
  124.  
  125.         puttext();
  126.         putclr();
  127.         putstatusline(cline);
  128.  
  129.         putxy(YTITLE,"Edit context:");
  130.         putxy(YFILE,"  |enter |F| for file context");
  131.         putxy(YAUTO,"A|uto indent:");
  132.         putonoff(YAUTO,autoin);
  133.         putxy(YBACKUP,"|make |B|ackup of original file:");
  134.         putonoff(YBACKUP,backup);
  135.         putxy(YTAB,"T|ab stops every");
  136.         gotoxy(XVAL,YTAB);
  137.         uspr(tabwidth);
  138.         putxy(YSTRIP,"S|trip trailing blanks,tabs");
  139.         putonoff(YSTRIP,!trail);
  140.         putxy(YCURSOR,"|display cursor |L|ine and column");
  141.         putonoff(YCURSOR,displaypos);
  142.         putxy(YSCROLL,"H|orizontal scroll whole screen");
  143.         putonoff(YSCROLL,blockscroll);
  144.         putxy(YHILITE,"|h|I|ghlight cursor line");
  145.         putonoff(YHILITE,hilight);
  146.  
  147.     putxy(YSPACE,"|Memory allows for no more than ");
  148.     uspr( (slotsinmem-2)*PAGESIZE/sizeof(anaddr) );
  149.     puts("| lines of text");
  150.  
  151.         putxy(YPROMPT,"Enter a letter, or [return] to exit:");
  152.         do {
  153.                 gotoxy(XPROMPT,YPROMPT);
  154.                 switch((c=getlow())) {
  155.                 case 'a':
  156.                         putonoff(YAUTO,(autoin= !autoin));
  157.                         break;
  158.                 case 'b':
  159.                         putonoff(YBACKUP,(backup= !backup));
  160.                         break;
  161.                 case 't':
  162.                         putxy(YTAB,"|Enter new |tab width|:");
  163.                         gotoxy(XVAL,YTAB);
  164.                         puts("    ");
  165.                         gotoxy(XVAL,YTAB);
  166.                         tabwidth=getnumb();
  167.                         putxy(YTAB,"T|ab stops every        ");
  168.                         break;
  169.                 case 'l':
  170.                         putonoff(YCURSOR,(displaypos=!displaypos));
  171.                         break;
  172.                 case 'h':
  173.                         putonoff(YSCROLL,(blockscroll=!blockscroll));
  174.                         break;
  175.                 case 's':
  176.                         putonoff(YSTRIP,!(trail=!trail));
  177.                         break;
  178.                 case 'i':
  179.                         putonoff(YHILITE,(hilight=!hilight));
  180.                         break;
  181.                 case 'f':
  182.                         files();
  183.                 case 'q':
  184.         case 'm':
  185.         case ESCKEY:
  186.                         goto escape;
  187.                         }
  188.                 }
  189.         while (YES);
  190. escape:
  191.         putclr();
  192.         topline=1;
  193.         if (helpon) dohelp();
  194.         putpage();
  195. }
  196.  
  197. files()
  198. {
  199.     char oldname[FILELEN], newname[FILELEN], c, getlow();
  200.     int dir, warn;
  201.  
  202.     dir=curdsk;
  203.     do {
  204.         printdirectory(dir);
  205.         putstatusline(cline);
  206. newcomm: 
  207.         errmess=NULL;
  208.         gotoxy(0,1);
  209.         puts("|Enter |[return]| to exit           |D| to delete a file\n");
  210.         puts("      R| to rename a file         |V| to view another directory  \n");
  211.         deleteline(0,3);
  212.         puts("      C| to change the name of the edited file ");
  213.         puts(filename);
  214.         deleteline(0,4); 
  215.         deleteline(0,5);
  216.         gotoxy(6,4); 
  217.         c=getlow();
  218.         putstatusline(cline);
  219.         deleteline(6,4);
  220.         if (c == 'r' || c == 'd' || c == 'c') {
  221.             puts("Name of file: ");
  222.             scans(oldname,FILELEN);
  223.             if (!oldname[0]) goto newcomm;
  224.             format(oldname);
  225.             }
  226.         switch (c) {
  227.         case 'm':
  228.         case 'q':
  229.         case ESCKEY:
  230.             return;
  231.         case 'v':
  232.             puts("Enter drive letter |(A to P): ");
  233.             if ( (dir=getkey()) == CR ||
  234.                 (dir=tolower(dir)-'a') < 0 || dir >= 16)
  235.                     dir=curdsk;
  236.             continue;
  237.         case 'd':
  238.             if (funlink(oldname) == FAIL) {
  239.                 error("Can't delete");
  240.                 goto newcomm;
  241.                 }
  242.             break;
  243.         case 'r' :
  244.             deleteline(6,5);
  245.             puts("New name:     ");
  246.             scans(newname,FILELEN);
  247.             format(newname);
  248.             if (!newname[0] || frename(oldname,newname) == FAIL) {
  249.                 error("Can't rename");
  250.                 goto newcomm;
  251.                 }
  252.             break;
  253.         case 'c'  :
  254.             strcpy(filename,oldname);
  255.             putstatusline(cline);
  256.         default:
  257.             goto newcomm;
  258.             }
  259.  
  260.         } 
  261.     while (YES);
  262. }
  263.  
  264. putxy(row,string)
  265. int row;
  266. char *string;
  267. {
  268.         gotoxy(XTEXT,row);
  269.         puts(string);
  270. }
  271.  
  272. putonoff(row,flag)
  273. int row,flag;
  274. {
  275.         gotoxy(XVAL,row);
  276.         puts((flag?"ON ":"OFF"));
  277. }
  278.  
  279. getnumb()
  280. {
  281.     int i, n;
  282.     char c, numb[5];
  283.  
  284.     scans(numb,5);
  285.     n=0;
  286.     for (i=0; (c=numb[i]); i++)
  287.         if (c >= '0' && c <= '9') n=n*10+c-'0';
  288.     return n;
  289. }
  290. 
  291.         case ESCKEY:
  292.                         goto escape;
  293.                         }
  294.                 }
  295.